package entity

import (
	"cmp"
	"fmt"
)

type PNode[T cmp.Ordered] struct {
	Data  T
	Left  *PNode[T]
	Right *PNode[T]
}

func (n *PNode[T]) String() string {
	return fmt.Sprintf("{%v %v %v}", n.Data, n.Left, n.Right)
}
func (n *PNode[T]) IsEmpty() bool {
	return n == nil
}
func (n *PNode[T]) IsLeaf() bool {
	if n == nil {
		return true
	}
	return n.Left == nil && n.Right == nil
}
func (n *PNode[T]) LeftTree() *PNode[T] {
	return n.Left
}
func (n *PNode[T]) RightTree() *PNode[T] {
	return n.Right
}

func (n *PNode[T]) ChildBinaryTree() *BinaryTree[T] {
	if n == nil {
		return nil
	}
	return &BinaryTree[T]{n}
}
